package com.lcm.learn.lcmcode.datatest;

import java.util.*;

/**
 * @description:
 * 编写一个函数，传入一个int型数组，返回该数组能否分成两组，使得两组中各元素加起来的和相等，
 * 并且，所有5的倍数必须在其中一个组中，所有3的倍数在另一个组中（不包括5的倍数），能满足以上条件，返回true；不满足时返回false。
 *
 * 输入描述:第一行是数据个数，第二行是输入的数据
 * 输出描述:返回true或者false
 *
20
-2 0 -3 3 -3 -4 -3 1 3 3 -2 0 3 2 2 -5 1 -2 -3 -5
 * @author: lcm
 * @create: 2019-12-26 10:51
 **/

public class Test4 {

    public static void main(String[] args){
//        Scanner scanner=new Scanner(System.in);
//        while (scanner.hasNextInt()){
//            int num = scanner.nextInt();
//            List<Integer> list=new LinkedList<>();
//            for (int i=0;i<num;i++){
//                list.add(scanner.nextInt());
//            }
//            System.out.println(get(list));
//        }

        Integer[] array=new Integer[]{-2,0,-3,3,-3,-4,-3,1,3,3,-2,0,3,2,2,-5,1,-2,-3,-5};
        List<Integer> list=new ArrayList<>();
        Collections.addAll(list,array);
        System.out.println(get(list));
    }

    public static boolean get(List<Integer> list){
        int num3=0;
        int num5=0;
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            Integer next = iterator.next();
            if(next%5==0){
                iterator.remove();
                num5=num5+next;
            }else if(next%3==0){
                iterator.remove();
                num3=num3+next;
            }
        }
        return check(num3,num5,0,list);
    }

    public static boolean check(int num3,int num5,int i,List<Integer> list){
        if(list.size()==i){
            if(num3==num5){
                return true;
            }else{
                return false;
            }
        }
        return check(num3+list.get(i),num5,i+1,list)||check(num3,num5+list.get(i),i+1,list);
    }

}
